// Keywords: continuous space, continuous spatial landscape, absorbing boundaries

initialize() {
	initializeSLiMOptions(dimensionality="xy");
	initializeMutationRate(1e-7);
	initializeMutationType("m1", 0.5, "f", 0.0);
	initializeGenomicElementType("g1", m1, 1.0);
	initializeGenomicElement(g1, 0, 99999);
	initializeRecombinationRate(1e-8);
	
	initializeInteractionType(1, "xy", reciprocal=T, maxDistance=0.3);  // competition
	i1.setInteractionFunction("n", 3.0, 0.1);
}
1 late() {
	sim.addSubpop("p1", 500);
	
	// Initial positions are random within spatialBounds
	p1.individuals.setSpatialPosition(p1.pointUniform(500));
}
1: late() {
	i1.evaluate(p1);
}
fitnessEffect() {
	totalStrength = i1.totalOfNeighborStrengths(individual);
	return 1.1 - totalStrength / p1.individualCount;
}
modifyChild() {
	// Absorbing boundary conditions
	pos = parent1.spatialPosition + rnorm(2, 0, 0.02);
	if (!p1.pointInBounds(pos))
		return F;
	
	child.setSpatialPosition(pos);
	return T;
}
2000 late() { sim.outputFixedMutations(); }
